package org.common.utils;

import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.util.HashMap;
import java.util.Map;

import org.springframework.cglib.beans.BeanMap;

public class BeanUtils {

    /**
     * 实体类转Map
     * @param t 实体类
     * @return 转成的Map
     */
	public static <T> Map<String, Object> beanToMap(final T t) {
        if (t == null) {
            return null;
        }
        final Map<String, Object> params = new HashMap<String, Object>();
        try {
            final PropertyDescriptor[] propertyDescriptors2 = Introspector.getBeanInfo(t.getClass()).getPropertyDescriptors();
            for (final PropertyDescriptor propertyDescriptor : propertyDescriptors2) {
                if (!propertyDescriptor.getName().equals("class")) {
                    params.put(propertyDescriptor.getName(), propertyDescriptor.getReadMethod().invoke(t));
                }
            }
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        return params;
    }

    /**
     * Map转实体类
     * @param map Map
     * @param bean 要转的实体类
     * @return 转成的实体类
     */
    public static <T> T mapToBean(final Map<String, Object> map, final T bean) {
        final BeanMap beanMap = BeanMap.create((Object)bean);
        beanMap.putAll(map);
        return bean;
    }
}
